package com.letao.server.controller;

import com.letao.server.dto.ReadListDTO;
import com.letao.server.dto.Result;
import com.letao.server.entity.MessageInfo;
import com.letao.server.service.IMessageService;
import com.letao.server.utils.UserHolderUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 消息模块处理类
 */
@RestController
@RequestMapping("/message")
@Slf4j
public class MessageController {
    @Resource
    IMessageService messageService;

    /**
     * 用户发送消息
     * 接口等级:用户
     *
     * @param info 消息内容
     * @return 返回的结果
     */
    @PostMapping("/user")
    private Result insertUser(@RequestBody MessageInfo info) {
        if (info.getContent() == null) {
            return Result.fail("内容缺失");
        }
        info.setUserId(UserHolderUtils.getUser().getId());
        info.setMsgType(0);
        info.setCreateTime(null);
        info.setIsUnread(null);
        info.setId(null);
        messageService.save(info);
        return Result.success();
    }

    /**
     * 用户接收消息
     * 接口等级:用户
     *
     * @param page 页码
     * @return 返回的结果
     */
    @GetMapping("/user")
    private Result queryUser(@RequestParam(defaultValue = "1") Long page) {
        return messageService.queryUser(page);
    }

    /**
     * 管理员发送消息
     * 接口等级:管理员
     *
     * @param info 消息内容
     * @return 返回的结果
     */
    @PostMapping("/admin")
    private Result insertAdmin(@RequestBody MessageInfo info) {
        if (info.getContent() == null || info.getUserId() == null) {
            return Result.fail("内容缺失");
        }
        info.setMsgType(1);
        info.setCreateTime(null);
        info.setIsUnread(null);
        info.setId(null);
        messageService.save(info);
        return Result.success();
    }

    /**
     * 管理员获取未读队列
     * 接口等级:管理员
     *
     * @return 返回的结果
     */
    @GetMapping("/admin/list")
    private Result queryList() {
        return messageService.queryList();
    }

    /**
     * 管理员获取未读消息
     *
     * @param userId 用户Id
     * @param page   页码
     * @return 返回的结果
     */
    @GetMapping("/admin/detail")
    private Result queryDetail(@RequestParam Long userId,
                               @RequestParam(defaultValue = "1") Long page) {
        return messageService.queryDetail(userId, page);
    }

    /**
     * 用户已读消息
     * 接口等级:用户
     *
     * @param readList 已读消息列表
     * @return 返回的结果
     */
    @PutMapping("/user")
    private Result readUser(@RequestBody ReadListDTO readList) {
        return messageService.readUser(readList);
    }

    /**
     * 管理员已读消息
     * 接口等级:管理员
     *
     * @param readList 已读消息列表
     * @return 返回的结果
     */
    @PutMapping("/admin")
    private Result readAdmin(@RequestBody ReadListDTO readList) {
        return messageService.readAdmin(readList);
    }

}
